home *** CD-ROM | disk | FTP | other *** search
- /*
- ** entity.c
- **
- ** entity structure, variables and functions ( "&xx;")
- **
- ** Copyright (C) 1995,96 Thomas Aglassinger
- **
- ** This program is free software; you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation; either version 2 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program; if not, write to the Free Software
- ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- **
- ** updated: 17-Mar-1996
- ** created: 8-Sep-1995
- **
- */
-
- #define NOEXTERN_HSCLIB_ENTITY_H
- #include "hsclib/inc_base.h"
- #include "hsclib/entity.h"
-
- /*
- **-------------------------------------
- ** constructor/destructor
- **-------------------------------------
- */
-
- /*
- ** new_hscent
- **
- ** alloc & init a new hscentity
- */
- HSCENT *new_hscent( STRPTR newid )
- {
-
- HSCENT *newent = (HSCENT*) umalloc( sizeof(HSCENT) );
-
- #if DEBUG_ENTITY
- fprintf( stderr, DHL " new_enty %s\n", newid );
- #endif
-
- if (newent) {
-
- /* init new entity item */
- newent->name = strclone(newid); /* set id */
- newent->replace = NULL;
- newent->numeric = 0L;
- }
-
- return (newent);
-
- }
-
- /*
- ** del_entity
- */
- VOID del_entity( APTR data )
- {
- HSCENT *ent = (HSCENT *)data;
-
- #if DEBUG_ENTITY
- fprintf( stderr, DHL " del_enty %s\n", ent->name );
- #endif
-
- ufreestr( ent->name );
- ufreestr( ent->replace );
- ent->numeric = 0;
- ufree( ent );
-
- }
-
- /*
- ** cpy_hscent
- **
- ** create a copy of an already existing entity
- */
- HSCENT *cpy_hscent( HSCENT *oldent )
- {
- HSCENT *newent = new_hscent( oldent->name );
-
- if ( newent ) {
-
- newent->replace = strclone( oldent->replace );
- newent->numeric = oldent->numeric;
-
- }
-
- return( newent );
- }
-
-
- /*
- **---------------------------
- ** find entity string
- **---------------------------
- */
-
- /*
- ** cmp_strent
- **
- ** compares a entity-string with the name
- ** of a HSCENT-entry
- */
- int cmp_strent( APTR cmpstr, APTR entdata )
- {
- STRPTR entstr = NULL;
-
- if ( entdata )
- entstr = ((HSCENT*)entdata)->name;
-
- if (entstr)
- if ( !strcmp( cmpstr, entstr ) )
- return (-1);
- else
- return (0);
- else
- return (0);
- }
-
- /*
- ** cmp_nument
- **
- ** compares a entity-string with the numeric
- ** data of a HSCENT-entry
- */
- int cmp_nument( APTR cmpstr, APTR entdata )
- {
- LONG num = -1;
- LONG cmpnum = (LONG) cmpstr;
-
- if ( entdata )
- num = ((HSCENT*)entdata)->numeric;
-
- return( ( num != -1 ) && ( num == cmpnum ) );
- }
-
- /*
- ** cmp_rplcent
- **
- ** compares a entity-string with the replace-item
- ** of a HSCENT-entry
- */
- int cmp_rplcent( APTR cmpstr, APTR entdata )
- {
- STRPTR entstr = NULL;
-
- if ( entdata )
- entstr = ((HSCENT*)entdata)->replace;
-
- if (entstr)
- if ( !strcmp( cmpstr, entstr ) )
- return (-1);
- else
- return (0);
- else
- return (0);
- }
-
- /*
- **-------------------------------------
- ** append entity functions
- **-------------------------------------
- */
-
- /*
- ** app_entnode
- **
- ** create a new entity and append it to entity-list
- **
- ** params: entid..name of the new entity (eg "uuml")
- ** result: ptr to the new entity or NULL if no mem
- */
- HSCENT *app_entnode( DLLIST *entlist, STRPTR entid )
- {
- HSCENT *newent;
-
- newent = new_hscent( entid );
- if ( newent ) {
-
- if (app_dlnode( entlist, newent ) == NULL ) {
-
- del_entity( (APTR) newent );
- newent = NULL;
-
- }
- }
-
- return (newent);
- }
-
-
- /*
- ** add_ent
- */
- BOOL add_ent( DLLIST *entlist, STRPTR entid, STRPTR entreplace, LONG num )
- {
- HSCENT *newent = app_entnode( entlist, entid );
-
- if ( entreplace )
- newent->replace = strclone( entreplace );
-
- newent->numeric = num;
-
- #if 0
- DDE(
- {
-
- STRPTR rplc = entreplace;
- if ( !rplc )
- rplc = "(empty)";
- fprintf( stderr, DHL "defent: \"%s\" \"%s\" %ld\n",
- entid, rplc, num );
-
- }
- );
- #endif
-
- return (TRUE);
-
- }
-
-